package java_thinking.unit_14._14_6_reflect;

/**
 * @Description :
 *      1.RTTI的使用
 * 　　　　如果不知道某个对象的确切类型，RTTI会告诉我们，但是有一个限制：这个类型在编译时必须已知，
 *      这样才能使用RTTI识别它，并利用这些信息做一些有用的事情。
 *
 * 　　  2.什么情况下需要反射
 * 　　　　假设你获取了一个指向某个并不在你的程序空间的对象的引用；或者，你从磁盘文件，或者网络连
 *      接中获取了一串字节，并且你被告知这些字节代表一个类，想要使用这些类就需要反射。
 *
 *      3.反射和RTTI的区别 (关键在于编译时class文件是否可取取)
 * 　　　　当通过反射与一个未知类型的对象打交道的时候，JVM只是简单的检查这个对象，看它属于那个特
 *      定的类。然后在使用这个对象之前先加载那个类的class对象，这个.class要么从本地机器获得，要
 *      么从网络中获得。RTTI和反射的区别就是，对RTTI来说，编译器在编译时打开和检查.class文件，而
 *      对于反射来说，.class在编译时是不可获取的，是在运行的时候打开和检查.class文件。
 *
 *      从网络中获得class的例子：
 *          人们想要在运行时获取类的信息的另一个动机，便是希望提供在跨网络的远程平台上创建和运行对
 *          象的能力，这被称为远程方法调用(RMI)，他允许一个java程序将对象分布到多台机器上，例如：
 *          你可能在执行一项需要进行大量计算的任务，为了提高运算速度，想将计算划分为许多小的计算单
 *          元，分布到空闲的机器上运行，又比如，你可能希望将处理特定类型任务的代码(例如多层的C/S)架
 *          构中的“业务规则”置于特定的机器上，于是这台机器就成为了描述这些动作的公共场所，可以很容易
 *          的通过改动它就达到影响系统中所有人的效果；
 *
 *      　Class类和java.lang.reflect类库一起对反射的概念进行了支持，该类库包括Field、Method以及
 *      Constructor类（每个类都实现了Member接口）。这些类型的对象是由JVM在运行时创建的，用以表示未知类
 *      里对应的成员。
 * @author: cww
 * @DateTime: 2019-03-30 15:12
 */

public class Reflect {
}
